package com.zw.weiyi.util;

import java.util.ArrayList;

import com.zw.weiyi.enety.Message;
import com.zw.weiyi.enety.SMS;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.telephony.SmsManager;
import android.widget.Toast;

/**
 * 发送短信的两种方式
 * 
 * @author Striver_zw Date 2014-12-19
 */
public class MessageUtil {

	/**
	 * sendTextMessage (String destinationAddress, String scAddress, String
	 * text, PendingIntent sentIntent, PendingIntent deliveryIntent)
	 * destinationAddress 发送短信的地址（也就是号码） scAddress 短信服务中心，如果为null，就是用当前默认的短信服务中心
	 * text 短信内容 sentIntent
	 * 如果不为null，当短信发送成功或者失败时，这个PendingIntent会被广播出去成功的结果代码是Activity
	 * .RESULT_OK，或者下面这些错误之一
	 * ：RESULT_ERROR_GENERIC_FAILURE,RESULT_ERROR_RADIO_OFF
	 * ,RESULT_ERROR_NULL_PDU等 通俗点说： 发送 -->中国移动 --> 中国移动发送失败 --> 返回发送成功或失败信号 -->
	 * 后续处理 即，这个意图包装了短信发送状态的信息 deliveryIntent
	 * 如果不为null，当这个短信发送到接收者那里，这个PendtingIntent会被广播
	 * ，状态报告生成的pdu（指对等层次之间传递的数据单位）会拓展到数据（"pdu"） 通俗点就是：发送 -->中国电信 --> 中国电信发送成功
	 * --> 返回对方是否收到这个信息 --> 后续处理 即：这个意图包装了短信是否被对方收到的状态信息（供应商已经发送成功，但是对方没有收到）。
	 * 
	 * @return <uses-permission android:name="android.permission.SEND_SMS" />
	 */

	// ？（1）如果你不需要发送报告，那么直接使用：
	/**
	 * 直接调用短信接口发短信，不含发送报告和接受报告
	 * 
	 * @param phoneNumber
	 * @param message
	 */
	// public void sendSMS(String phoneNumber, String message) {
	// // 获取短信管理器
	// android.telephony.SmsManager smsManager =
	// android.telephony.SmsManager.getDefault();
	// // 拆分短信内容（手机短信长度限制）
	// List<String> divideContents = smsManager.divideMessage(message);
	// for (String text : divideContents) {
	// smsManager.sendTextMessage(phoneNumber, null, text, null, null);
	// }
	// }

	// 发送报告
	public static PendingIntent sendIntent1(Context context) {
		// 处理返回的发送状态
		String SENT_SMS_ACTION = "SENT_SMS_ACTION";
		Intent sentIntent = new Intent(SENT_SMS_ACTION);
		PendingIntent sendIntent = PendingIntent.getBroadcast(context, 0,
				sentIntent, 0);
		// register the Broadcast Receivers
		context.registerReceiver(new BroadcastReceiver() {
			public void onReceive(Context context, Intent intent) {
				switch (getResultCode()) {
				case Activity.RESULT_OK:
					// Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT)
					// .show();
					// System.out.println("短信发送成功");
					break;
				case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
					break;
				case SmsManager.RESULT_ERROR_RADIO_OFF:
					break;
				case SmsManager.RESULT_ERROR_NULL_PDU:
					break;
				}
			}
		}, new IntentFilter(SENT_SMS_ACTION));

		return sendIntent;
	}

	// 接收报告
	public static PendingIntent backIntent1(Context context) {

		// 处理返回的接收状态
		String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
		// create the deilverIntent parameter
		Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
		PendingIntent backIntent = PendingIntent.getBroadcast(context, 0,
				deliverIntent, 0);
		context.registerReceiver(new BroadcastReceiver() {
			@Override
			public void onReceive(Context _context, Intent _intent) {
				// Toast.makeText(context,"收信人已经成功接收", Toast.LENGTH_SHORT)
				// .show();
				// System.out.println("收信人已经成功接收");
			}
		}, new IntentFilter(DELIVERED_SMS_ACTION));
		return backIntent;
	}

	// 由于么有发送记录
	// 自己保存信息
	public static void insert(Context context, String phone, long date,
			String cont) {
		// 获取内容提供者
		ContentResolver cr = context.getContentResolver();
		// 创建uri
		Uri url = Uri.parse("content://sms");
		// 内容提供者的集合
		ContentValues values = new ContentValues();
		values.put("address", phone);
		values.put("type", 2);// 发给别人的状态
		values.put("date", date);
		values.put("body", cont);
		cr.insert(url, values);
		// System.out.println("ok");
	}

	public static void sendMessage(Context context, String phone, String connt) {
		if (connt != null && !connt.isEmpty()) {
			SmsManager manager = SmsManager.getDefault();
			// 以下方式没有发送记录
			ArrayList<String> connts = manager.divideMessage(connt);// 对内容进行拆分，（字数超过）
			// 对多条短信进行发送
			for (String tx2 : connts) {
				// 第一个参数是手机号码！第二个是使用默认网络，③、短信内容,4、得到发送状态，5、得到对方接收状态
				manager.sendTextMessage(phone, null, tx2,
						MessageUtil.sendIntent1(context),
						MessageUtil.backIntent1(context));
				long date = System.currentTimeMillis();
				// 插入到手机里面
				MessageUtil.insert(context, phone, date, tx2);
			}
			// 采用土司方式显示发送消息
			Toast.makeText(context, "发送成功", Toast.LENGTH_LONG).show();

		} else {
			Toast.makeText(context, "发送失败", Toast.LENGTH_LONG).show();
		}

	}
	
	//删除一个联系人中一条信息
	public static void deleteMessageChild(Context context, Message mb) {
	context.getContentResolver().delete(Uri.parse("content://sms/conversations/"
					+ mb.get_id()),	"_id = " + mb.getChlil_id(),null);
	}
	
	//删除该联系人所有信息
	public static void deleteMessage(Context context, SMS sms) {
		Uri mUri=Uri.parse("content://sms/conversations/" + sms.getThread_id());
		context.getContentResolver().delete(mUri, null, null);
	}
}
